Ich habe einige Zeit mit JSON herumgespielt, es nur als Text herausgeschoben und es hat niemanden verletzt (von dem ich weiß), aber ich würde gerne anfangen, die Dinge richtig zu machen. Ich habe so viele angebliche "Standards" für den JSON-Inhaltstyp gesehen: Anwendung / json Anwendung / X-Javascript Text / Javascript Text / X-Javascript text / x-json Aber welches ist richtig oder am besten? Ich stelle fest, dass es Sicherheits- und Browserunterstützungsprobleme gibt, die zwischen ihnen variieren. Ich weiß, dass es eine ähnliche Frage gibt: Welcher MIME-Typ, wenn JSON von einer REST-API zurückgegeben wird?, Aber ich hätte gerne eine etwas gezieltere Antwort.
2020-12-07 21:16:31
1 2 Nächster Für JSON-Text: Anwendung / json Der MIME-Medientyp für JSON-Text ist application / json. Die Standardcodierung ist UTF-8. (Quelle: RFC 4627). Für JSONP (ausführbares JavaScript) mit Rückruf: Anwendung / Javascript Hier sind einige Blog-Beiträge, die in den entsprechenden Kommentaren erwähnt wurden: Warum Sie Text / HTML nicht für JSON verwenden sollten Internet Explorer hat manchmal Probleme mit application / json Eine ziemlich vollständige Liste der Mimetypen und wofür sie verwendet werden sollen Die offizielle MIME-Typliste bei IANA aus der Antwort von @ gnrfan unten | IANA hat den offiziellen MIME-Typ für JSON als application / json registriert. Auf die Frage, warum nicht text / json, scheint Crockford gesagt zu haben, dass JSON weder JavaScript noch Text ist und dass IANA eher die Anwendung / * als text / * verteilt. Mehr Ressourcen: Medientypen Bitte um Kommentare 4627 Bluesmoon: JSON hat einen Typ | Für JSON: Inhaltstyp: application / json Für JSON-P: Inhaltstyp: Anwendung / Javascript | Natürlich ist der richtige MIME-Medientyp für JSON application / json, aber es ist erforderlich zu erkennen, welcher Datentyp in Ihrer Anwendung erwartet wird. Zum Beispiel verwende ich Ext GWT und die Serverantwort muss als Text / HTML lauten, enthält aber JSON-Daten. Client-Seite, Ext GWT Form Listener uploadForm.getForm (). addListener (neuer FormListenerAdapter () { @Override public void onActionFailed (Formular form, int httpStatus, String responseText) { MessageBox.alert ("Fehler"); }} @Override public void onActionComplete (Formular form, int httpStatus, String responseText) { MessageBox.alert ("Erfolg"); }} }); Bei Verwendung des Antworttyps application / json schlägt der Browser vor, die Datei zu speichern. Serverseitiges Quellcode-Snippet mit Spring MVC neues AbstractUrlBasedView () zurückgeben { @ SuppressWarnings ("nicht markiert") @Override protected void renderMergedOutputModel (Kartenmodell, HttpServletRequest-Anforderung, HttpServletResponse-Antwort) löst eine Ausnahme aus { response.setContentType ("text / html"); response.getWriter (). write (json); }} }; | JSON: Die Antwort besteht aus dynamisch generierten Daten gemäß den in der URL übergebenen Abfrageparametern. Beispiel: {"Name": "Foo", "Id": 1234, "Rang": 7} Inhaltstyp: application / json JSON-P: JSON mit Polsterung. Die Antwort sind JSON-Daten, um die ein Funktionsaufruf gewickelt ist. Beispiel: functionCall ({"Name": "Foo", "Id": 1234, "Rank": 7}); Inhaltstyp: Anwendung / Javascript | Wenn Sie Ubuntu oder Debian verwenden und .json-Dateien über Apache bereitstellen, möchten Sie möglicherweise die Dateien mit dem richtigen Inhaltstyp bereitstellen. Ich mache dies hauptsächlich, weil ich die Firefox-Erweiterung JSONView verwenden möchte Das Apache-Modul mod_mime hilft dabei. Unter Ubuntu müssen Sie jedoch die Datei /etc/mime.types bearbeiten und die Zeile hinzufügen Anwendung / json json Starten Sie dann Apache neu: sudo service apache2 neu starten | Wenn Sie ASP.NET Web Services vom Client aus aufrufen, müssen Sie application / json verwenden, damit es funktioniert. Ich glaube, dass dies auch für die Frameworks jQuery und Ext gilt. | Der richtige Inhaltstyp für JSON ist application / json, es sei denn, Sie verwenden JSONP, auch bekannt als JSON with Padding, das eigentlich JavaScript ist. Der richtige Inhaltstyp wäre also application / javascript. | Es besteht kein Zweifel, dass application / json der beste MIME-Typ für eine JSON-Antwort ist. Ich hatte jedoch einige Erfahrungen mit der Verwendung von application / x-javascript aufgrund einiger Komprimierungsprobleme. Meine Hosting-Umgebung ist Shared Hosting mit GoDaddy. Sie erlauben mir nicht, Serverkonfigurationen zu ändern. Ich hatte meiner web.config-Datei den folgenden Code hinzugefügt, um Antworten zu komprimieren.dynamicTypes> staticTypes> htpCompression> Auf diese Weise wurden die ASPX-Seiten mit g-zip komprimiert, JSON-Antworten jedoch nicht. Ich fügte hinzu in den Abschnitten statische und dynamische Typen. Dies komprimiert JSON-Antworten jedoch überhaupt nicht. Danach habe ich diesen neu hinzugefügten Typ entfernt und hinzugefügt in den Abschnitten für statische und dynamische Typen und änderte den Antworttyp in .ashx (asynchroner Handler) zu Anwendung / X-Javascript Und jetzt stellte ich fest, dass meine JSON-Antworten mit g-zip komprimiert wurden. Daher empfehle ich persönlich zu verwenden Anwendung / X-Javascript Nur wenn Sie Ihre JSON-Antworten in einer gemeinsam genutzten Hosting-Umgebung komprimieren möchten. Beim Shared Hosting können Sie IIS nicht ändernKonfigurationen. | Nur wenn ich application / json als MIME-Typ verwende, habe ich Folgendes (Stand November 2011 mit den neuesten Versionen von Chrome, Firefox mit Firebug): Keine Warnungen mehr von Chrome, wenn der JSON vom Server geladen wird. Firebug fügt der Antwort eine Registerkarte hinzu, auf der die JSON-Daten angezeigt werden formatiert. Wenn der MIME-Typ unterschiedlich ist, wird er nur als angezeigt 'Antwortinhalt'. | Nicht alles funktioniert für den Inhaltstyp application / json. Wenn Sie das Ext JS-Formular zum Hochladen von Dateien verwenden, beachten Sie, dass die Serverantwort vom Browser analysiert wird, um das Dokument für den